import {message} from 'antd';
import {config} from './config';
import reqwest from 'reqwest';
import Promise from 'bluebird';
import md5 from 'bluebird';
const path=config.path;
const app={
  serverUrl:config.serverUrl,
  imgServerUrl:config.imgServerUrl,
  fileUrl:config.fileUrl,
  loadIndex:'' ,
  pageLength:20,
    /**
     * 保存token值
     * @param token
     */
  setToken:function(token){
      return localStorage.setItem('platFormtoken',token);
  },
    /**
     * 获取token值
     */
  getToken:function () {
      return localStorage.getItem('platFormtoken');
  },
    /**
     * 移除token值
     */
  removeToken:()=>{
      localStorage.removeItem('platFormtoken');
  },
    /**
     * 保存数据到本地
     * @param key
     * @param value
     */
  setState:(key,value)=>{
      if(!value){
          return;
      }
      if(typeof value=="object"){
          localStorage.setItem(key,JSON.stringify(value));
      }else{
          localStorage.setItem(key,value);
      }
  },
    /**
     * 从本地获取数据
     * @param key
     * @param defaultData
     * @returns {*}
     */
    getData:(key,defaultData)=>{
      try{
          var re=localStorage.getItem(key);
          if(re){
              return JSON.parse(re);
          }else{
              return defaultData;
          }
      }catch (e){
          return re;
      }
    },
    /**
     * 移除本地数据
     * @param key
     */
    removeData:(key)=>{
      localStorage.removeItem(key);
    },
    /**
     * 处理post请求
     * @param url
     * @param data
     * @returns {*}
     */
    post:function (url,data) {
        //以下两个固定传给服务器的参数
        //data.token=app.getToken();
        //data.log_type='0';
        const re=app.ajax(url,data,'POST');
        return re;
    },
    /**
     * 处理postJson请求
     * @param url
     * @param data
     * @param succCallBack
     * @param errorCallBack
     */
    postJson(url, data, succCallBack, errorCallBack) {
        data.token = this.getToken();
        this.ajaxJson(url, JSON.stringify(data), "POST", succCallBack, errorCallBack, "application/json; charset=utf8");
    },
    ajaxJson(url, data, method, succCallBack, errorCallBack){
        this.ajax(url, data, method, succCallBack, errorCallBack, "application/json; charset=utf8");
    },
    put: function (url, data, succCallBack, errorCallBack) {
        app.ajax(url, data, "PUT", succCallBack, errorCallBack);
    },
    get:function (url,data) {
        let reqParam="";
        if(data){
            for(let key in data){
                const item=data[key];
                if(!item){
                    continue;
                }
                reqParam+=key+"="+item+"&";
            }
            reqParam+="token="+app.getToken();
        }
        return app.ajax(url+"?"+reqParam,{},"GET");
    },
    del:function (url,data) {
        var reqParam="";
        for(var key in data){
            reqParam+=key+"="+data[key]+"&";
        }
        reqParam.substr(0,reqParam.length-1);
        return app.ajax(url+"?"+reqParam,{},"DELETE");
    },
    /**
     * 处理ajax请求
     * @param url
     * @param data
     * @param method
     * @param contentType
     */
    ajax(url,data,method,contentType='application/x-www-form-urlencoded;charset=utf8',){
        const reqUrl=config.serverUrl+url;
        app.log(reqUrl);
        return new Promise((resolve)=>{
            reqwest({
                url:reqUrl,
                data:data,
                method:method,
                dataType:'json',
                contentType:contentType,
            }).then((req)=>{
                const {code,msg,data}=req;
                if(code===1){
                    app.log(`请求： ${reqUrl} 返回的数据：${JSON.stringify(data)}`);
                }else{
                    app.error("请求："+reqUrl+" 返回的数据："+JSON.stringify(data));
                }
                resolve(req);
            },({Status,readyState})=>{
                if(config.debug){
                    app.alert(`请求地址：${url} 请求的参数：${JSON.stringify(data)} 请求的状态：${Status}，XMLHttpRequest对象的状态：${readyState}`,"error",10);
                }else{
                    app.alert('网络错误，请检查网络',"error",3);
                }
            })
        })
    },
    tokenInvalid(location){
        app.alert("请重新登陆");
        location.push('/');
    },
    /**
     * 日期检测
     */
    testDate(value){
        const reg = /([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))/;
        return reg.test(value);
    },
    log(msg){
        if (config.debug) {
            console.log(msg);
        }
    },
    /**
     * 打印错误信息
     * @param msg
     */
    error(msg){
        if (config.debug) {
            console.error(msg);
        }
    },
    /**
     * 弹出警告
     * @param msg 警告内容
     * @param times 时长 默认 1.5
     * @param type 警告类型可选值 success、error、warning、info 默认 info
     */
    alert(msg,type="info",times=1.5){
        message.config({
            top:'35%',
            duration:2
        });
        message[type](msg,times);
    },
    /**
     * 对输入的内容进行去空格
     * @param str为输入的内容
     */
    trimSpace(str){
        let result;
        result=str.replace(/(^\s+)|(\s+$)/g,"");
        result=result.replace(/\s/g,"");
        return result;
    },
    /**
     * 返回n位的随机数
     * @param n
     * @returns {*}
     */
    getRandom(n){
        let ran=Math.random()*Math.pow(10,n);
        ran+='';
        return ran[0];
    },
    /**
     * 对字符串进行md5加密
     * @param value
     */
    md5(value){
        return md5(value);
    }
};

export default app;